interface CameraOptions {
    center?: [number, number]; // 经度、纬度
    zoom?: number;             // 缩放级别
    bearing?: number;          // 旋转角度 (0 - 360)
    pitch?: number;            // 倾斜角度 (0 - 60)
}


/**
* 设置相机的各种属性：中心、缩放、旋转、倾斜
* @param options 相机设置选项
*/
export function setCamera(map: any, options: CameraOptions) {
    if (options.center) {
        map.setCenter(options.center);
    }
    if (options.zoom !== undefined) {
        map.setZoom(options.zoom);
    }
    if (options.bearing !== undefined) {
        map.setBearing(options.bearing);
    }
    if (options.pitch !== undefined) {
        map.setPitch(options.pitch);
    }
}
/**
 * 获取当前相机的所有状态
 * @returns 返回相机当前的中心点、缩放、旋转、倾斜
 */
export function getCamera(map: any) {
    return {
        center: map.getCenter().toArray() as [number, number],
        zoom: map.getZoom(),
        bearing: map.getBearing(),
        pitch: map.getPitch(),
    };
}
/**
 * 平移地图（中心点变化）
 * @paramCenter 平移的经纬度偏移量
 */
export function panByCenter(map: any, offset: [number, number]) {
    map.panByCenter(offset);

}
/**
 * 缩放地图（增加或减少缩放级别）
 * @param zoomChange 缩放级别的偏移量
 */
export function zoomBy(map: any, zoomChange: number) {
    map.zoomBy(zoomChange);
}
/**
 * 设置地图的缩放级别
 * @param zoom 缩放级别
 */
export function setZoom(map: any, zoom: number) {
    map.setZoom(zoom);
}
/**
 * 设置地图的旋转角度
 * @param bearing 旋转角度
 */
export function setBearing(map: any, bearing: number) {
    map.setBearing(bearing);
}
/**
 * 设置地图的倾斜角度
 * @param pitch 倾斜角度
 */
export function setPitch(map: any, pitch: number) {
    map.setPitch(pitch);
}
/**
* 跳转到指定的中心点
* @param center 指定的经纬度位置
*/
export function flyToCenter(map: any, center: any, options?: mapboxgl.FlyToOptions) {
    map.flyTo({
        center,
        zoom: options?.zoom ?? map.getZoom(),
        bearing: options?.bearing ?? map.getBearing(),
        pitch: options?.pitch ?? map.getPitch(),
        essential: true,
        ...options,
    });
}
/**
* 跳转到指定的视角（包括中心点、缩放、旋转、倾斜）
* @param options 指定的视角设置
*/
export function flyToView(map: any, options: CameraOptions & mapboxgl.FlyToOptions) {
    map.flyTo({
        center: options.center,
        zoom: options.zoom,
        bearing: options.bearing,
        pitch: options.pitch,
        ...options,
    });
}

/**
 * 重置地图到默认视角
 */
export function resetCamera(map: any) {
    setCamera(map, {
        center: [0, 0], // 可以设置为默认值（例如 [0, 0]）
        zoom: 2,        // 默认缩放级别
        bearing: 0,     // 默认旋转角度
        pitch: 0,       // 默认倾斜角度
    });
}


